home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Mac Game Programming Gurus / TricksOfTheMacGameProgrammingGurus.iso / More Source / C⁄C++ / graph3D / graph3D source / graph3D.h < prev    next >
Text File  |  1993-09-17  |  6KB  |  322 lines

  1. /*
  2.     Copyright '89    Christopher Moll
  3.     all etceteras reserved
  4. */
  5.  
  6. #define    _MC68881_
  7.  
  8. //#define    FIXED_MATH
  9.  
  10. typedef double    Real;
  11.  
  12. #include    <math.h>
  13. #include    <string.h>
  14. #include    <ctype.h>
  15. #include    <stdio.h>
  16. #include <Palettes.h>
  17.  
  18.  
  19.  
  20. #define    PI (3.14159265358979)
  21.  
  22.  
  23. /*pascal    Boolean    WaitNextEvent() = 0xa860;
  24. */
  25.  
  26. /* windows */
  27. #define    WIND_FUNCT    128
  28. #define WIND_GRAPH    129
  29.  
  30. #define SCREEN_WIDTH        512
  31. #define SCREEN_HEIGHT        342
  32. #define SCREEN_MARGIN        4
  33. #define TITLE_BAR_HEIGHT    18
  34. #define    SCBAR_WIDTH            15
  35.  
  36.  
  37. /* Dialogs */
  38. #define DIAL_SCALE_XY    128
  39. #define DIAL_SCALE_RP    138
  40. #define    DIALI_S_SX        1
  41. #define    DIALI_S_EX        2
  42. #define    DIALI_S_SY        3
  43. #define    DIALI_S_EY        4
  44. #define    DIALI_S_REDRWB    9
  45.  
  46. #define DIAL_LIMT        129
  47. #define    DIALI_L_ZS        1
  48. #define    DIALI_L_C        2
  49. #define    DIALI_L_F        3
  50.  
  51. #define DIAL_METER        131
  52.  
  53. #define DIAL_FUNCT        134
  54. #define    DIALI_F_SWTCH    1
  55. #define    DIALI_F_FUNCT    2
  56.  
  57. #define DIAL_DERIV        135
  58. #define    DIALI_D_SWTCH    1
  59. #define    DIALI_D_FUNC1    4
  60. #define    DIALI_D_FUNC2    5
  61.  
  62. #define DIAL_INITVL        136
  63. #define    DIALI_I_VALUE    2
  64.  
  65. #define DIAL_CYLIND        137
  66.  
  67. /* Alerts */
  68. #define ALRT_FORM        130
  69. #define ALRT_FILE        132
  70. #define ALRT_MEMRY        133
  71. #define    ALERT_020        139
  72. #define    ALERT_881        140
  73. #define ALRT_ABOUT        141
  74. #define ALERT_GENRAL    200
  75.  
  76. /* menus */
  77. #define MENU_BAR_HEIGHT        20
  78.  
  79. #define MENU_APPLE    1
  80. #define MENU_FILE    2
  81.     enum {
  82.         FILE_OPEN = 1, FILE_OPEN_MAND, FILE_CLOSE, FILE_SVBITM, FILE_SVOBJ, FILE_QUIT };
  83.  
  84. #define MENU_EDIT    3
  85.     enum {
  86.         EDIT_UNDO = 1, EDIT_CUT = 3, EDIT_COPY, EDIT_PASTE, EDIT_CLEAR };
  87.  
  88. #define MENU_PLOT    4
  89.     enum {
  90.         PLOT_WIREFRAM = 1, PLOT_SHDSURF, PLOT_SHDHITE, PLOT_DRWSCRN, PLOT_SETLITE = 6,
  91.         PLOT_ZEROROT = 8, PLOT_NORMVIEW, PLOT_TOPVIEW, PLOT_REDRAW = 12 };
  92.  
  93. #define MENU_GTYP    5
  94. /* graph types */
  95.     enum {
  96.         FUNCT_GTYPE = 1, CYLIND_GTYPE, DERIV_GTYPE, FDATA_GTYPE };
  97.  
  98. #define MENU_WIND    6
  99.     enum {
  100.         WINDMEN_GRAPH = 1, WINDMEN_FUNCT, WINDMEN_SPECS, WINDMEN_LIMITS };
  101.  
  102.  
  103.     /* Switcher stuff */
  104. #define        IS_SUSPND(x)    (!((x)&0x1))
  105. #define        LOAD_CLIP(x)    ((x)&0x2)
  106. #define        resumEvt        15
  107.  
  108.  
  109.  
  110.  
  111. /* Boolean operations */
  112. #define NOT            !
  113. #define AND            &&
  114. #define NEQ            !=
  115. #define EQ            ==
  116. #define OR            ||
  117. #define COMP        ~
  118.  
  119. /* Math macros */
  120. #define MOD            %
  121. #define Abs(x)        ((x>0)?(x):(-(x)))
  122. #define round(x)    ((int)((x)+((x)>0)-.5))
  123. #define CLOSE(x,y)    (Abs((x)-(y))<1.0E-15)
  124. #define SQ(x)        ((x)*(x))
  125. #define SQ_L(x)        ((long)(x)*(long)(x))
  126.         /* convert to longs when squaring large integers */
  127. #define    MAX(x,y)    ((x>y)?(x):(y))
  128. #define    MIN(x,y)    ((x<y)?(x):(y))
  129. #define    IS_DIGIT(x)        ((x)>='0'&&(x)<='9')
  130. #define NIL            ((long)0)
  131. #define    DIV_2(x)    ((x)>>1)
  132. #define    DIV_4(x)    ((x)>>2)
  133. #define    MUL_2(x)    ((x)<<1)
  134. #define    MUL_4(x)    ((x)<<2)
  135.  
  136. #define    DeBug()    asm {dc.w 43519}
  137.  
  138. #define Pstrcpy(x,y)    BlockMove(x,y,(long)((x)[0]+1))
  139. #define    HIWORD(x)    ((int)((x)>>16))
  140. #define    LOWORD(x)    ((int)(x))
  141. #define    HIBYTE(x)    (((x)&0xff000000)>>24)
  142.  
  143. #define    pass(x)        (x).h,(x).v
  144. #define    ptoc(x)        PtoCstr(x)
  145. #define    ctop(x)        CtoPstr(x)
  146. #define    cotan(x)    (1.0/tan(x))
  147.  
  148. #define    LOG2        (.6931471806)
  149. #define    RADtoDEG    (180.0)/PI
  150. #define    DEGtoRAD    PI/(180.0)
  151. #define    SMALL        (1.0e-10)
  152.  
  153.  
  154. #ifdef    _MC68881_
  155.     Real    mldexp(Real, int);
  156. #else
  157.     #define    mldexp(x)    ldexp(x)
  158. #endif
  159.  
  160.  
  161. /* Fixed math */
  162. #define    FixToD(x)    mldexp((Real)(x),-16)
  163. #define    DToFix(x)    ((long)mldexp((x),16))
  164. #define    FixToi(x)    ((int)((x)>>16))
  165. #define    iToFix(x)    (((long)(x))<<16)
  166. #define    FIX_0        (0L)
  167. #define    FIX_1        (0x00010000)
  168. #define    DToRFix(x)    (long)mldexp((x),16+rangeScale)
  169.  
  170.  
  171.  
  172. #define    MAX_SYMBS        11
  173.  
  174. #define    END_SYMB        0
  175. #define    ADD_SYMB        1
  176. #define    SUBT_SYMB        2
  177. #define    MULT_SYMB        3
  178. #define    DIV_SYMB        4
  179. #define    POWR_SYMB        5
  180.  
  181. #define    L_PAREN_SYMB    6
  182. #define    R_PAREN_SYMB    7
  183. #define    FUNC_SYMB        8
  184. #define    NUMB_SYMB        9
  185. #define    NEG_SYMB        10
  186.  
  187.  
  188. #define    MAX_OPS        30
  189.  
  190. #define    END_OP        0
  191. #define    ADD_OP        1
  192. #define    SUBT_OP        2
  193. #define    MULT_OP        3
  194. #define    DIV_OP        4
  195. #define    POWER_OP    5
  196. #define    MOD_OP        6
  197.  
  198. #define    NEG_OP        7
  199. #define    EXP_OP        8
  200. #define    LOG_OP        9
  201. #define    LOG10_OP    10
  202. #define    SQ_OP        11
  203. #define    SQRT_OP        12
  204. #define    SIN_OP        13
  205. #define    ASIN_OP        14
  206. #define    COS_OP        15
  207. #define    ACOS_OP        16
  208. #define    TAN_OP        17
  209. #define    ATAN_OP        18
  210. #define    COTAN_OP    19
  211. #define    SINH_OP        20
  212. #define    COSH_OP        21
  213. #define    TANH_OP        22
  214.  
  215.  
  216. #define    PUSH_X_OP        -1
  217. #define    PUSH_Y_OP        -2
  218. #define    PUSH_Z_OP        -3
  219. #define    PUSH_NUM_OP        -4
  220. #define    OP_L_PAREN        -5
  221. #define    OP_R_PAREN        -6
  222.  
  223. #define    ACT_OPtTEX        1
  224. #define    ACT_TEXtF        2
  225. #define    ACT_DELOPT        3
  226. #define    ACT_STPDN        4
  227. #define    ACT_STPERR        5
  228. #define    ACT_OPtF        6
  229. #define    ACT_DELOP        7
  230.  
  231. #define    IS_FUNC(x)    ((x)>MOD_OP)
  232. #define    IS_PUSH(x)    ((x)<0)
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240. typedef unsigned char    Uchar;
  241.  
  242.  
  243. typedef struct  {
  244.     Real    x;
  245.     Real    y;
  246.     Real    z;
  247. } Vector;
  248.  
  249. typedef struct {
  250.     Fixed    x;
  251.     Fixed    y;
  252.     Fixed    z;
  253. } FxVector;
  254.  
  255. typedef    struct {
  256.     Real    v;
  257.     Real    h;
  258. } DoubPoint;
  259.  
  260. typedef struct {
  261.     Fixed    v;
  262.     Fixed    h;
  263. } FixPoint;
  264.  
  265. typedef struct {
  266.     Real    top;
  267.     Real    left;
  268.     Real    bottom;
  269.     Real    right;
  270. } DoubRect;
  271.  
  272. typedef    struct {
  273.     Fixed    conts[3][3];
  274. } cpyFx3Matrx;
  275.  
  276. typedef    struct {
  277.     Real    conts[3][3];
  278. } cpy3Matrx;
  279.  
  280. typedef    struct {
  281.     int        length;
  282.     Pattern    patList[64];
  283. } PatternList, **PattListHand;
  284.  
  285.  
  286. #    define MoveToTrapNum   0x93
  287. #    define LineToTrapNum   0x91
  288. #    define FixMulTrapNum   0x68
  289.     pascal    void    RMoveTo(...);
  290.     pascal    void    RLineTo(...);
  291.     pascal    void    MLineTo(...);
  292. #    define MoveTo        RMoveTo
  293. #    define LineTo        RLineTo
  294.  
  295.  
  296. /*
  297. The following is (c) Dave Platt, 1988
  298.     taken from MandelZot
  299. */
  300.  
  301.  
  302. /* Save-file section header */
  303.  
  304. typedef struct FileSection {
  305.   long int          signature;
  306.   int               type;
  307.   int               version;
  308.   long int          byteCount;
  309. } FileSection, *FileSectionPtr, **FileSectionHandle;
  310.  
  311. /* Coordinate save block, Version 0 */
  312.  
  313. typedef struct CoordBlock {
  314.   int               width;
  315.   int               height;
  316.   int               maxDwell;
  317.   short double      top;
  318.   short double      left;
  319.   short double      bottom;
  320.   short double      right;
  321. } CoordBlock, CoordBlockPtr, CoordBlockHandle;
  322.